package com.itbaizhan;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/*创建HttpSession*/
/*HttpSession对象的创建是通过request.getSession()方法来创建的。
客户端浏览器在请求服务端资源时，如果在请求中没有jsessionid，
getSession()方法将会为这个客户端浏览器创建一个新的HttpSession对象，
并为这个HttpSession对象生成一个jsessionid，在响应中通过 状态Cookie
写回给客户端浏览器，如果在请求中包含了jsessionid，getSession()方法则
根据这个ID返回与这个客户端浏览器对应的HttpSession对象。

getSession()方法还有一个重载方法getSession(true|false)。
当参数为true时与getSession()方法作用相同。当参数为false时则只去
根据jsessionid查找是否有与这个客户端浏览器对应的HttpSession，
如果有则返回，如果没有jsessionid则不会创建新的HttpSession对象。*/

/*不同的浏览器创建不同的jsessionid,创建不同的jession对象
* 当关闭浏览器时，HttpSession对象不会销毁，会缓存在HttpSession列表中，只是删除了cookie,再次启动浏览器
* 时，会重新创建一个HttpSession对象*/
public class CreatHttpSession extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建HttpSession对象
        //这是无参
        //HttpSession httpSession = req.getSession();
        //有参的getSession(true/false)  true与无参的一样
        HttpSession httpSession = req.getSession(true);

        //存放数据
        httpSession.setAttribute("key","ITBZ");
        httpSession.setAttribute("learn","Chinese");
        //获取sessionID
        String sesssionID = httpSession.getId();
        System.out.println(httpSession);

        PrintWriter pw = resp.getWriter();
        pw.println("Creat HttpSession OK!"+sesssionID);
        pw.flush();
        pw.close();

    }

    /*HttpSession对象的使用
session.setAttribute("key",value)
将数据存储到HttpSession对象中

Object value = session.getAttribute("key")
根据key获取HttpSession中的数据，返回Object

Enumeration attributeNames = session.getAttributeNames()
获取HttpSession中所有的key，返回枚举类型

session.removeAttribute("key")
根据key删除HttpSession中的数据

String id = session.getId()
根据获取当前HttpSession的SessionID，返回字符串类型*/
}
